package Aula15;

public class ArvoreExpressoesImpl implements ArvoreExpressoes{

	public static final long MAIS = 1;
    public static final long MENOS = 2;
    public static final long VEZES = 3;
    public static final long DIVISAO = 4;
    
    public static No raiz;
    
    
	public int carregaArvore(No raizArvoreExpressoes) {
		if (raizArvoreExpressoes.key != 1 && raizArvoreExpressoes.key != 2
				&& raizArvoreExpressoes.key != 3
				&& raizArvoreExpressoes.key != 4 && ehEstritamenteBinaria(raizArvoreExpressoes)){
			raiz = raizArvoreExpressoes;
			return 1;
		}
		return 0;
	}

	private boolean isFolha(No no){
		if(no.left == null && no.right == null)
			return true;
		return false;
	}
		
	private String caractere(long n){
		if(n == 1){
			return "+";
		}
		if(n == 2){
			return "-";
		}
		if(n == 3){
			return "*";
		}
		if(n == 4){
			return "/";
		}else{
			return "NUMERO INVALIDO";
		}
	}
	
	private String verificaNo(No no){
		String resposta = "";
		if(isFolha(no)){
			resposta += no.key;
		}else{
			resposta += caractere(no.key);
		}
		return resposta;
	}
	
	private boolean ehEstritamenteBinaria(No raiz) {
		if(!raiz.hasLeft() && !raiz.hasRight()){
			return true;
		} else {
			if (raiz.hasLeft() && raiz.hasRight()) {
				return ehEstritamenteBinaria(raiz.left)
						&& ehEstritamenteBinaria(raiz.right);
			} else {
				return false;
			}
		}
	}
	
	public long getResultadoExpressao() {
		return 0;
	}

	private void emOrdem(No n) {
		if (n != null) {
			emOrdem(n.left);
			System.out.println(n.key);
			emOrdem(n.right);
		}
	}
	
	public String imprimeInfixa() {
		String resposta = "";
		No noAux = raiz.right;
		
		emOrdem(noAux);
		return resposta;
	}

	public String imprimePosfixa() {
		return null;
	}

	public String imprimePrefixa() {
		return null;
	}
	
	public static void main(String[] args) {
	    
	    ArvoreExpressoes ae = new ArvoreExpressoesImpl();
	        
	        Aula15.No raizArvoreExpressoes = new No(21L);
	        
	        if (ae.carregaArvore(raizArvoreExpressoes) == 1) {
	            System.out.println(ae.imprimeInfixa());
	            System.out.println(ae.imprimePosfixa());
	            System.out.println(ae.imprimePrefixa());
	        
	            System.out.println(ae.getResultadoExpressao());

	         }   
	}
}
